﻿#define _CRT_SECURE_NO_WARNINGS 1
// 原题连接：https://www.nowcoder.com/practice/2c6a0a8e1d20492f92941400036e0890
/*
题目描述：
描述
给定一个字符串数组strs，再给定两个字符串str1和str2，返回在strs中str1和str2的最小距离，如果str1或str2为null，或不在strs中，返回-1。
输入描述：
输入包含有多行，第一输入一个整数n
（
1
≤
�
≤
1
0
5
）
（1≤n≤10
5
 ），代表数组strs的长度，第二行有两个字符串分别代表str1和str2，接下来n行，每行一个字符串，代表数组strs (保证题目中出现的所有字符串长度均小于等于10)。
输出描述：
输出一行，包含一个整数，代表返回的值。
示例1
输入：
1
CD AB
CD
复制
输出：
-1
复制
示例2
输入：
5
QWER 666
QWER
1234
qwe
666
QWER
复制
输出：
1
复制
备注：
时间复杂度
�
（
�
）
O（n），额外空间复杂度
�
（
1
）
O（1）
*/

#include <iostream>
#include <vector>
#include <string>
using namespace std;
// 方法——模拟 + 贪心
int main() {
    int n = 0;
    scanf("%d", &n);
    string s1, s2;
    cin >> s1 >> s2;
    vector<string> strs(n);
    for (int i = 0; i < n; i++) {
        cin >> strs[i];
    }
    int pre1 = -1, pre2 = -1; // pre1和pre2分别表示当我们遍历到第i个字符串的时候，左边离i位置最近的一个s1的位置，右边离i位置最近的s2的位置
    int ret = n + 1;
    for (int i = 0; i < n; i++) {
        if (strs[i] == s1) {
            if (pre2 != -1) {
                ret = min(ret, i - pre2);
            }
            pre1 = i;
        }
        else if (strs[i] == s2) {
            if (pre1 != -1) {
                ret = min(ret, i - pre1);
            }
            pre2 = i;
        }
    }
    if (ret == n + 1) {
        ret = -1;
    }
    cout << ret << endl;
    return 0;
}